Page({
  data: {
    point: '', // 小区
    building: '', // 楼栋
    room: '', //房间
    name: '', // 业主姓名
    gender: 0, // 性别 0女(默认) 1男
    mobile: '', //手机号码
    idcardFrontUrl: '', // 身份证正面
    idcardBackUrl: '', // 身份证背面
  },

  // ---------------生命周期钩子函数-begin----------------
  onLoad({ point, building, room, id }) {
    if (id) {
      // 编辑
      // 1.1 修改标题
      wx.setNavigationBarTitle({
        title: '编辑房屋信息',
      })
      // 1.2 获取房屋详情
      this.getHouseDetail(id)
    } else {
      // 添加
      this.setData({ point, building, room })
    }
  },
  // ---------------生命周期钩子函数-end------------------

  // ---------------自定义函数-begin-----------------------
  // 0. 获取房屋详情信息
  async getHouseDetail(id) {
    // 1.1 调用获取房屋详情接口
    if (!id) return wx.utils.toast('缺乏必要参数')
    const { code, data: houseDetail } = await wx.http.get(`/room/${id}`)
    if (code !== 10000) return wx.util.toast('获取房屋详情失败')
    // 1.2 更新数据
    this.setData({ ...houseDetail })
  },
  // 1. 校验姓名
  verifyName() {
    // 验证业主姓名（必须为汉字）
    const reg = /^[\u4e00-\u9fa5]{2,5}$/
    // 验证结果
    const valid = reg.test(this.data.name.trim())
    // 提示信息
    if (!valid) wx.utils.toast('请填写真实中文姓名!')
    // 返回结果
    return valid
  },
  // 2. 校验手机号
  verifyMobile() {
    // 验证手机号码
    const reg = /^1[3-9]\d{9}$/
    // 验证结果
    const valid = reg.test(this.data.mobile.trim())
    // 提示信息
    if (!valid) wx.utils.toast('请填写正确的手机号码!')
    // 返回结果
    return valid
  },
  // 3. 校验身份证正反面
  verifyPicture() {
    const { idcardFrontUrl, idcardBackUrl } = this.data
    // 必须正反面都上传照片
    const vaild = !!idcardFrontUrl && !!idcardBackUrl
    if (!vaild) wx.utils.toast('请上传完整身份证照片')
    return vaild
  },
  // 4. 提交审核
  async submitForm() {
    // 4.1 先校验
    if (!this.verifyName()) return
    if (!this.verifyMobile()) return
    if (!this.verifyPicture()) return

    // 4.2 发请求
    delete this.data.__webviewId__ // 删除多余的属性
    delete this.data.status // 删除多余的属性
    const { code } = await wx.http.post('/room', this.data)
    if (code !== 10000) return wx.utils.toast('添加房屋信息失败')

    // 4.3 回房屋列表页面
    wx.navigateBack({
      delta: this.data.id ? 2 : 4,
    })
  },
  // 5. 删除身份证照片
  removePicture(ev) {
    // 移除图片的类型（身份证正面或反面）
    const type = ev.mark?.type
    this.setData({ [type]: '' })
  },
  // 6. 上传身份证照片
  async uploadPicture(ev) {
    // console.log(ev.mark.type)
    const type = ev.mark.type

    // 6.1 选择图片
    const res = await wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
    })
    // console.log(res.tempFiles[0].tempFilePath)

    // 6.2 调用接口上传图片
    wx.showLoading({
      title: '正在上传中...',
      mask: true,
    })
    wx.uploadFile({
      filePath: res.tempFiles[0].tempFilePath,
      name: 'file',
      url: wx.http.baseURL + '/upload',
      header: {
        Authorization: getApp().token,
      },
      success: (res) => {
        const data = JSON.parse(res.data)
        if (data.code !== 10000) return wx.utils.toast('上传身份证照片失败')
        // 更新数据
        this.setData({ [type]: data.data.url })
      },
      complete: () => {
        wx.hideLoading()
      },
    })
  },
  // ---------------自定义函数-end-------------------------
})
